home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 04 - 1988 / 04.06 Jun 88 / Basic Source / HMenu.BAS < prev    next >
Encoding:
BASIC Source File  |  1988-04-09  |  3.7 KB  |  163 lines  |  [TEXT/ZBAS]

  1. REM Hierarchical Menu Demo
  2. REM ©MacTutor 1988
  3. REM By Dave Kelly
  4.  
  5. WINDOW OFF
  6. COORDINATE WINDOW
  7. DEF MOUSE=-1
  8. everyevent=-1:REM ALL events mask
  9. False=0:True=NOT False
  10. DIM dragRect%(3)
  11.  
  12. 'Find out monitor size just in case we need it
  13. CALL GETWMGRPORT(WMgrPort&)
  14. PortTop=PEEK WORD(WMgrPort&+8)
  15. PortLeft=PEEK WORD(WMgrPort&+10)
  16. PortBottom=PEEK WORD(WMgrPort&+12)
  17. PortRight=PEEK WORD(WMgrPort&+14)
  18. CALL SETRECT(dragRect%(0),PortLeft+10,PortTop+10,PortRight-10,PortBottom-10)
  19.  
  20. REM Setup the EventRecord
  21. myEvent%=0:REM 'what' is first variable
  22. message&=0
  23. when&=0
  24. where=0:REM y coordinate of point is first
  25. wherex=0
  26. modifiers=0
  27. applemark=&H14
  28. whichwindow&=0
  29. charCodeMask&=VAL("&H000000FF")
  30. keyCodeMask&= VAL("&H0000FF00")
  31. myWindow&=FN GETNEWWINDOW(29414,0,-1)
  32. CALL SETPORT(myWindow&)
  33. TEXT 2,12,0,0
  34. CLS
  35. GOSUB "SetUpMenus"
  36. FLUSHEVENTS
  37. "EventLoop": REM Main Event Loop
  38. DO
  39. CALL SYSTEMTASK
  40. LONG IF FN GETNEXTEVENT(everyevent,myEvent%)
  41.     SELECT myEvent%
  42.         CASE 0    :REM No Event
  43.         CASE 1    :REM mousedown
  44.             wResult=FN FINDWINDOW(where,whichwindow&)
  45.             SELECT wResult
  46.                 CASE 0    :REM inDesk (do nothing)
  47.                 CASE 1    :REM inMenuBar
  48.                     mResult&=FN MENUSELECT(where)
  49.                     theMenu=FN HIWORD(mResult&)
  50.                     theItem=FN LOWORD(mResult&)
  51.                     SELECT theMenu
  52.                         CASE 255
  53.                             GOSUB "appleID"
  54.                         CASE 134
  55.                             GOSUB "fileID"
  56.                         CASE 2
  57.                             GOSUB "editID"
  58.                         CASE 136
  59.                             GOSUB "StyleID"
  60.                         CASE 137
  61.                             GOSUB "FontID"
  62.                     END SELECT
  63.                     CALL HILITEMENU(0)
  64.                 CASE 2    :REM inSysWindow
  65.                     CALL SYSTEMCLICK(myEvent%,whichwindow&)
  66.                 CASE 3    :REM inContent
  67.                 CASE 4    :REM inDrag
  68.                     CALL DRAGWINDOW(myWindow&,where,dragRect%(0))
  69.                 CASE 5    :REM inGrow
  70.                 CASE 6    :REM inGoAway
  71.                     Byte=FN TRACKGOAWAY(myWindow&,where)
  72.                     IF Byte THEN PRINT" CLOSEWINDOW(myWindow&)"
  73.             END SELECT
  74.         CASE 2    :REM mouseup
  75.         CASE 3    :REM keydown
  76.             PRINT"key-down"
  77.             charCode&=FN BITAND(message&,charCodeMask&)
  78.             keyCode&=FN BITAND(message&,keyCodeMask&)
  79.             keyCode&=FN BITSHIFT(keyCode&,-8)
  80.             PRINT "Charcode=";charCode&
  81.             PRINT "Keycode=";keyCode&
  82.         CASE 4    :REM keyup
  83.         CASE 5    :REM autokey
  84.         CASE 6    :REM updateEvt
  85.         CASE 7    :REM diskEvt
  86.         CASE 8    :REM activateEvt
  87.         CASE 10    :REM networkEvt
  88.         CASE 11    :REM driverEvt
  89.         CASE 12    :REM app1Evt
  90.         CASE 13    :REM app2Evt
  91.         CASE 14    :REM app3Evt
  92.         CASE 15    :REM app4Evt
  93.         CASE ELSE
  94.     END SELECT
  95. END IF
  96. UNTIL theEnd
  97.  
  98. "SetUpMenus"
  99. APPLE MENU "About Sample…"
  100. AboutHandle&=FN GETMHANDLE(255)
  101. FileHandle&=FN GETMENU(134)
  102. CALL INSERTMENU(FileHandle&,0)
  103. EDIT MENU 2
  104. EditHandle&=FN GETMHANDLE(130)
  105. FormatHandle&=FN GETMENU(135):'Get Format Menu Handle
  106. StyleHandle&=FN GETMENU(136):'Get Style Menu Handle
  107. FontHandle&=FN GETMENU(137):'Get Font Menu Handle
  108. CALL INSERTMENU(FormatHandle&,0)
  109. CALL INSERTMENU(StyleHandle&,-1):'Style Menu
  110. CALL INSERTMENU(FontHandle&,-1):'Font Menu
  111. CALL ADDRESMENU(FontHandle&,CVI("FONT"))
  112. '
  113. ' Check default font in Font menu
  114. fontcnt%=FN COUNTMITEMS(FontHandle&)
  115. defaultfont$="Geneva"
  116. FOR i=1 TO fontcnt%
  117.     CALL GETITEM(FontHandle&,i,item$)
  118.     IF item$=defaultfont$ THEN Oldmitem=i:i=fontcnt%+1
  119. NEXT i
  120. CALL CHECKITEM(FontHandle&,Oldmitem,True)
  121. TextStyle=0
  122. Plain=0
  123. Bold=1
  124. Italic=2
  125. Underline=4
  126. Outline=8
  127. Shadow=16
  128. Condense=32
  129. Extend=64
  130. just=0
  131.  
  132. CALL DRAWMENUBAR
  133. RETURN
  134.  
  135. "appleID"
  136.     CALL GETITEM(AboutHandle&,theItem,Var$)
  137.     PRINT Var$
  138.     mrefNum=FN OPENDESKACC(Var$)
  139.     CALL SETPORT(myWindow&)
  140.     RETURN
  141. "fileID"
  142.     END
  143. RETURN
  144. "editID"
  145.     IF NOT FN SYSTEMEDIT(theItem-1) THEN RETURN
  146.     SELECT theItem
  147.         CASE 1:REM undo command
  148.         CASE 3:REM cut command
  149.         CASE 4:REM copy command
  150.         CASE 5:REM paste command
  151.         CASE 6:REM clear command
  152.     END SELECT
  153. RETURN
  154. "StyleID"
  155.     CALL GETITEM(StyleHandle&,theItem,Var$)
  156.     CLS:PRINT Var$;" selected"
  157. RETURN
  158.  
  159. "FontID"
  160.     CALL GETITEM(FontHandle&,theItem,Var$)
  161.     CLS:PRINT Var$;" selected"
  162. RETURN
  163.